﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

//void mune()
//{
//
//	printf("_________________________________________________________\n");
//	printf("_____                                               _____\n");
//	printf("_____                                               _____\n");
//	printf("_____      1.进入                0.退出             _____\n");
//	printf("_____                                               _____\n");
//	printf("_________________________________________________________\n");
//}
//
//void game()
//{
//	printf("接下来，请猜一个数字>:\n");
//	
//	int ret = rand() % 100 + 1;
//	while(1)
//	{
//		int n = 0;
//		scanf("%d", &n);
//		if (ret == n)
//		{
//			printf("爆炸了\n");
//			break;
//		}
//		else if (ret > n)
//		{
//			printf("猜小了\n");
//		}
//		else
//		{
//			printf("猜大了\n");
//		}
//	}
//}
//
//
//
//int main()
//{
//	int input = 0;
//	srand((unsigned int)time(NULL));
//	do
//	{
//		mune();
//		printf("请选择>:");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			printf("进入游戏\n");
//			game();
//			break;
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("输入错误，请重新输入\n");
//			break;
//		}
//	} while (input);
//	
//
//	return 0;
//}


//int main()
//{
//	char arr[20] = { 0 };
//
//	system("shutdown -s -t 60");
//	agine:
//	printf("你的电脑将在1分钟后自动关机，除非你输入:xiaoqihangshizhu\n");
//
//	scanf("%s", arr);
//	if (strcmp(arr, "xiaoqihangshizhu") == 0)
//	{
//		system("shutdown -a");
//	}
//	else
//		goto agine;
//
//
//	return 0;
//}

//void exchange(int* t1, int* t2)
//{
//	int tem = *t1;
//	*t1 = *t2;
//	*t2 = tem;
//}
//
//int main()
//{
//	int a, b, c;
//	scanf("%d %d %d", &a, &b, &c);
//
//	if (a < b)
//	{
//		exchange(&a, &b);
//	}
//	if (a < c)
//	{
//		exchange(&a, &c);
//	}
//	if (b < c)
//	{
//		exchange(&b, &c);
//	}
//
//	printf("%d %d %d", a, b, c);
//	return 0;
//}

//算素数
//int main() {
//
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	for (i = 100; i <= 200;i++)
//	{
//		int flag = 0;
//		for (j = 2;j <i; j++)
//		{
//			if (i % j == 0)
//			{
//				/*printf("%d不是素数\n",i);*/
//				flag = 1;
//				break;
//			}
//		}
//		if (flag == 0)
//		{
//			//printf("%d是素数\n", i);
//			count++;
//		}
//			
//	}
//	printf("%d", count);
//	return 0;
//}

//int main() {
//
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	for (i = 101; i <= 200; i+=2)
//	{
//		int flag = 0;
//		for (j = 2; j <= sqrt(i); j++)
//		{
//			if (i % j == 0)
//			{
//				/*printf("%d不是素数\n",i);*/
//				flag = 1;
//				break;
//			}
//		}
//		if (flag == 0)
//		{
//			printf("%d是素数\n", i);
//			count++;
//		}
//
//	}
//	printf("%d", count);
//	return 0;
//}

//int main()
//{
//	int ret = 0;
//	int n = 0;
//	for (ret = 1000; ret <= 2000; ret++)
//	{
//		if (ret % 4 == 0 && ret % 100 != 0 )
//		{
//			printf("%d是闰年\n", ret);
//			n++;
//		}
//		if (ret % 400 == 0)
//		{
//			printf("%d是闰年\n", ret);
//			n++;
//		}
//	}
//	printf("%d", n);
//
//	return 0;
//}

//最大公约数
//int main()
//{
//	int n, m;
//	scanf("%d %d", &n, &m);
//	
//	int min = (n > m ? m : n);
//	while (1)
//	{
//		if (n % min == 0 && m % min == 0)
//		{
//			break;
//		}
//		min--;
//	}
//	printf("最大公约数是：%d\n", min);
//	return 0;
//}

//辗转相除法 :最大公约数
int main()
{
	int m,n;
	scanf("%d %d", &n, &m);
	int k = 0;
	while (k=m%n)
	{
		m = n;
		n = k;
	}
	printf("%d", n);
	return 0;
}